# -!- coding: utf-8 -!-
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
#作者：cacho_37967865
#博客：https://blog.csdn.net/sinat_37967865
#文件：deal_image.py
#日期：2021-04-29
#备注：图片基础操作
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

from PIL import Image
from pycacho.cachobase.logger import Logger
logger = Logger("deal_image").get_log()


def replace_color(in_file,crop_box,pixel,out_file):
    im = Image.open(in_file)
    new_img = im.crop(crop_box)         # 四元组的坐标依次是（左，上，右，下）
    w, h = new_img.size
    for i in range(w):
        for j in range(h):
            L = new_img.getpixel((i, j))
            #print(i, j, L)
            new_img.putpixel((i, j), pixel)  # (178, 32, 45)
    im.paste(new_img, crop_box)
    #im.show()
    im.save(out_file,'PNG')


# 图片裁剪： in_image-->输入的图片，out_image-->输出的图片,box-->裁剪区间依次是（左，上，右，下）
def crop_image(in_image,out_image,box):
    img = Image.open(in_image)
    img.crop(box).save(out_image)


# 创建新图片，补全图片为正方形 l-左边，r-右边，u-上面，d-下面;
# 只有在type=Q时，length才有用
#  (type: L2-左右，H2-上下，Q-手工添加大小([0,40,50,50]=左，上，右，下
def create_background(in_image,type,length,out_image):
    img = Image.open(in_image)
    k = img.width  # k-宽度，
    g =img.height       # g-高度
    if g<k and type!='Q':  # 宽度>高度，
        new_image = Image.new("RGB", (k, k), "#FFFFFF")
        add_u = int((k - g) / 2)  # 上面分割需要补全长度的一半
    elif g>k and type!='Q':
        new_image = Image.new("RGB", (g, g), "#FFFFFF")
        add_u = int((g - k) / 2)  # 左边分割需要补全长度的一半
    else:
        new_image = Image.new("RGB", (k+length[0]+length[2], g+length[1]+length[3]), "#FFFFFF")  # 白色
        add_u = int((k+length[0]+length[2] - g) / 2)  # 上面分割需要补全长度的一半
    L, H = new_image.size  # 必须为L,H
    print(L, H,add_u)
    if type=='H2':  # 补全上下，为正方形
        for h in range(H):
            for l in range(L):
                dot = (l, h)
                if h<add_u:
                    color_0 = img.getpixel((l, 1))   # 上面补全图片上边界
                elif h>g-1+add_u:     # 图片高度-1 再加上上面补全长度
                    color_0 = img.getpixel((l, g-1))   # 下面补全图片下边界
                else:
                    color_0 = img.getpixel((l, h-add_u))  # 中间部分复制原图片
                new_image.putpixel(dot, color_0)
    elif type=='L2':  # 补全左右，为正方形
        print('开始补全图片左右两边.....')
        for h in range(H):
            for l in range(L):
                dot = (l, h)
                if l<add_u:
                    color_0 = img.getpixel((1, h))   # 补全图片左边界
                    #color_0 = (255,255,255)
                elif l>k-1+add_u:     # 图片宽度-1 再加上上面补全长度
                    color_0 = img.getpixel((k-1, h))   # 补全图片右边界
                    #color_0 = (255,255,255)
                else:
                    color_0 = img.getpixel((l-add_u, h))  # 中间部分复制原图片
                new_image.putpixel(dot, color_0)
    else:                     # 补全四周
        for h in range(H):
            for l in range(L):
                dot = (l, h)
                if length[1]<h < g-1+length[1] and length[0]<l<k-1+length[0]:
                    color_0 = img.getpixel((l-length[0], h-length[1]))  # 中间部分复制
                else:
                    color_0 = (220,220,208)      # 固定色块 (255,255,255)，(0,0,0)
                    #color_0 = img.getpixel((l, 0))   # 仅仅上面添加
                    #color_0 = img.getpixel((l, g-1))   # 仅仅下面添加
                    #color_0 = img.getpixel((length[1], h))  # 仅仅左边添加
                    #color_0 = img.getpixel((k-1, h))  # 仅仅右边添加
                new_image.putpixel(dot, color_0)
    new_image.save(out_image, quality=100)

# 图片等比例缩放： in_image-->输入的图片，out_image-->输出的图片,size-->图片尺寸（长，宽）
def resize_image(in_image,out_image,size):
    im = Image.open(in_image)
    image = im.resize(size)
    image.save(out_image,quality=100)


if __name__ == '__main__':
    replace_color('F:\image\output\\new\\01\\工厂资料_000.jpg', (600, 668, 1280, 725), (52, 52, 52), 'F:\image\output\\new\\01\\a.png')
    #transparent('./file/a.jpg','')
    #merge_image('./file/a-copy.png', './file/c-copy.png')